home *** CD-ROM | disk | FTP | other *** search
- ;--------------------------------------------------------------------------------
- ;RomaHead for ASK3 v1.00 1995.08.21 by M.Kamada
- ;
- ; int romahead(char *buffer);
- ;
- ; 機能:
- ; ASK68K version 3.01/3.02 のローマ字変換で、かなに変換されていない
- ; ローマ字の部分を求めます
- ;
- ; 引数:
- ; buffer ローマ字を格納するバッファへのポインタ
- ; 念のため16バイト程度確保しておくこと
- ;
- ; 返却値:
- ; 1~ かなに変換されていないローマ字の文字数
- ; 0 かなに変換されていないローマ字はない
- ; -1 ASK68K が組み込まれていない
- ; -2 ASK68K のバージョンが 3.01/3.02 のいずれでもない
- ; -3 _KNJCTRL のベクタが変更されていて処理できない
- ;--------------------------------------------------------------------------------
-
- .include doscall.mac
- .include iocscall.mac
-
- .text
- .xdef _romahead
- _romahead:
- movea.l 4(sp),a2 ;buffer
- movem.l d3-d7/a3-a6,-(sp)
- ;ASK68Kのバージョンをチェックする
- moveq.l #50,d0
- move.l d0,-(sp)
- DOS _KNJCTRL
- addq.l #4,sp
- moveq.l #-1,d7
- tst.l d0
- beq exit ;ASK68Kが組み込まれていない
- moveq.l #-2,d7
- tst.l d0
- bmi exit ;ASK68Kのバージョンが違う
- move.w d0,d6 ;d6.w:バージョン(301/302)
- sub.w #301,d0
- blo exit ;ASK68Kのバージョンが違う
- cmp.w #302-301,d0
- bhi exit ;ASK68Kのバージョンが違う
- lsl.w #2,d0
- move.w d0,d5 ;d5.w:バージョン(0/4)
- move.w #_KNJCTRL,-(sp)
- DOS _INTVCG
- addq.l #2,sp
- movea.l d0,a0
- lea.l -$63C(a0),a6 ;a6.l:ASK68Kの先頭
- lea.l v1(pc),a0
- move.l (a0,d5.w),d0
- lea.l (a6,d0.l),a1
- IOCS _B_WPEEK
- moveq.l #-3,d7
- cmp.w d6,d0
- bne exit ;ベクタが変更されている
- ;現在のモードを確認する
- lea.l v2(pc),a0
- move.l (a0,d5.w),d0
- lea.l (a6,d0.l),a1
- IOCS _B_WPEEK
- move.w d0,d4 ;d4.w:現在のモード
- bne mode1
- ;モード0(FPを起動していないとき)
- mode0:
- lea.l v3(pc),a0
- move.l (a0,d5.w),d0
- lea.l (a6,d0.l),a1
- IOCS _B_WPEEK
- move.w d0,d3 ;ローマ字の文字数
- bra getRoma
-
- ;モード0以外(FPを起動しているとき)
- mode1:
- lea.l v4(pc),a0
- move.l (a0,d5.w),d0
- lea.l (a6,d0.l),a1
- IOCS _B_LPEEK
- move.l d0,d1
- IOCS _B_LPEEK
- move.w d0,d3
- sub.w d1,d3
- lsr.w #1,d3 ;ローマ字の文字数
- movea.l d1,a1
- ;ローマ字を得る
- getRoma:
- moveq.l #0,d7
- move.w d3,d7 ;ローマ字の文字数
- beq getRomaEnd
- subq.w #1,d3
- getRomaLoop:
- IOCS _B_WPEEK
- move.b d0,(a2)+
- dbra d3,getRomaLoop
- getRomaEnd:
- clr.b (a2)
- ;終わり
- exit:
- move.l d7,d0
- movem.l (sp)+,d3-d7/a3-a6
- rts
-
- v1: .dc.l $DC6A,$DCDE
- v2: .dc.l $EB22,$EB96
- v3: .dc.l $1477E,$147F2
- v4: .dc.l $22C8A,$22CFE
-